﻿using System;
using System.Collections.Generic;
using System.Linq;

namespace Controller2.Models.ViewModels
{
    public class FornecedorViewModel
    {
        public int ID { get; set; }
        public string Nome { get; set; }
        public string Email { get; set; }
        public string Fone { get; set; }
        public string Cidade { get; set; }
        public string DataCadastro { get; set; }

        public IEnumerable<FornecedorViewModel> Listar(ControllerBDModelContainer db, string texto, int filtro)
        {
            IEnumerable<FornecedorViewModel> cli;
            int codigo = 0;
            if (filtro == 1)
            {
                if (!Int32.TryParse(texto, out codigo))
                {
                    filtro = 0;
                    texto = "";
                }
            }
            if (string.IsNullOrWhiteSpace(texto) || texto.Equals("Digite sua pesquisa"))
            {
                filtro = 0;
                texto = "";
            }
            switch (filtro)
            {
                default:
                    cli = (from t in db.TipoPessoa
                           where t.Tipo.Equals("Fornecedor")
                           from p in t.Pessoa
                           select new
                           {
                               ID = p.IdPessoa,
                               Nome = p.NomePessoa,
                               Email = p.Email,
                               Cidade = p.Cidade.NomeCidade + " - " + p.Cidade.Estado.NomeEstado,
                               Fone = p.Fone,
                               DataCadastro = p.DataCadastro
                           }).ToList().Select(s => new FornecedorViewModel
                           {
                               ID = s.ID,
                               Nome = s.Nome,
                               Email = s.Email,
                               Cidade = s.Cidade,
                               Fone = s.Fone,
                               DataCadastro = s.DataCadastro.ToShortDateString()
                           });
                    break;
                case 1:
                    cli = (from t in db.TipoPessoa
                           where t.Tipo.Equals("Fornecedor")
                           from p in t.Pessoa
                           where p.IdPessoa == codigo
                           select new
                           {
                               ID = p.IdPessoa,
                               Nome = p.NomePessoa,
                               Email = p.Email,
                               Cidade = p.Cidade.NomeCidade + " - " + p.Cidade.Estado.NomeEstado,
                               Fone = p.Fone,
                               DataCadastro = p.DataCadastro
                           }).ToList().Select(s => new FornecedorViewModel
                           {
                               ID = s.ID,
                               Nome = s.Nome,
                               Email = s.Email,
                               Cidade = s.Cidade,
                               Fone = s.Fone,
                               DataCadastro = s.DataCadastro.ToShortDateString()
                           });
                    break;
                case 2:
                    cli = (from t in db.TipoPessoa
                           where t.Tipo.Equals("Fornecedor")
                           from p in t.Pessoa
                           where p.NomePessoa.Contains(texto)
                           select new
                           {
                               ID = p.IdPessoa,
                               Nome = p.NomePessoa,
                               Email = p.Email,
                               Cidade = p.Cidade.NomeCidade + " - " + p.Cidade.Estado.NomeEstado,
                               Fone = p.Fone,
                               DataCadastro = p.DataCadastro
                           }).ToList().Select(s => new FornecedorViewModel
                           {
                               ID = s.ID,
                               Nome = s.Nome,
                               Email = s.Email,
                               Cidade = s.Cidade,
                               Fone = s.Fone,
                               DataCadastro = s.DataCadastro.ToShortDateString()
                           });
                    break;
                case 3:
                    cli = (from t in db.TipoPessoa
                           where t.Tipo.Equals("Fornecedor")
                           from p in t.Pessoa
                           where p.Email.Contains(texto)
                           select new
                           {
                               ID = p.IdPessoa,
                               Nome = p.NomePessoa,
                               Email = p.Email,
                               Cidade = p.Cidade.NomeCidade + " - " + p.Cidade.Estado.NomeEstado,
                               Fone = p.Fone,
                               DataCadastro = p.DataCadastro
                           }).ToList().Select(s => new FornecedorViewModel
                           {
                               ID = s.ID,
                               Nome = s.Nome,
                               Email = s.Email,
                               Cidade = s.Cidade,
                               Fone = s.Fone,
                               DataCadastro = s.DataCadastro.ToShortDateString()
                           });
                    break;
                case 4:
                    cli = (from t in db.TipoPessoa
                           where t.Tipo.Equals("Fornecedor")
                           from p in t.Pessoa
                           where p.Cidade.NomeCidade.Contains(texto)
                           select new
                           {
                               ID = p.IdPessoa,
                               Nome = p.NomePessoa,
                               Email = p.Email,
                               Cidade = p.Cidade.NomeCidade + " - " + p.Cidade.Estado.NomeEstado,
                               Fone = p.Fone,
                               DataCadastro = p.DataCadastro
                           }).ToList().Select(s => new FornecedorViewModel
                           {
                               ID = s.ID,
                               Nome = s.Nome,
                               Email = s.Email,
                               Cidade = s.Cidade,
                               Fone = s.Fone,
                               DataCadastro = s.DataCadastro.ToShortDateString()
                           });
                    break;
            }
			return cli.OrderBy(o => o.ID);
        }

        public IEnumerable<FornecedorViewModel> Procura(ControllerBDModelContainer db, string texto)
        {
            IEnumerable<FornecedorViewModel> fornec;
            int codigo = 0;
            if (Int32.TryParse(texto, out codigo))
            {
                fornec = (from t in db.TipoPessoa
                       where t.Tipo.Equals("Fornecedor")
                       from p in t.Pessoa
                       where p.IdPessoa == codigo
                       select new
                       {
                           ID = p.IdPessoa,
                           Nome = p.NomePessoa,
                       }).ToList().Select(s => new FornecedorViewModel
                       {
                           ID = s.ID,
                           Nome = s.Nome
                       });
            }
            else
            {
                fornec = (from t in db.TipoPessoa
                       where t.Tipo.Equals("Fornecedor")
                       from p in t.Pessoa
                       where p.NomePessoa.Contains(texto)
                       select new
                       {
                           ID = p.IdPessoa,
                           Nome = p.NomePessoa,
                       }).ToList().Select(s => new FornecedorViewModel
                       {
                           ID = s.ID,
                           Nome = s.Nome
                       });
            }

			return fornec.OrderBy(o => o.ID);
        }
    }
}